iT邦幫忙

2025 iThome 鐵人賽

DAY 3
0
Cloud Native

let's beginning use kubernetes系列 第 3

Concepts - Cluster Architecture

  • 分享至 

  • xImage
  •  

doc link

K8s 架構概覽:大腦與身體

要理解 Kubernetes (K8s) 的架構,我們可以將其比喻為人體:

  • 控制平面 (Control Plane):是叢集的「大腦」。它負責儲存叢集的狀態、做出全局決策(例如調度),以及偵測和回應叢集事件。它不運行使用者應用程式,只專注於管理。
  • 工作節點 (Worker Nodes):是叢集的「身體」和「四肢」。它們是真正負責執行您應用程式容器(Pods)的地方。每個 Worker Node 都會接收來自「大腦」的指令,並據此管理在本機運行的容器。

一個典型的生產環境叢集,通常會有多個 Control Plane 節點以實現高可用性 (HA),以及更多的 Worker Node 來提供運算能力。

https://ithelp.ithome.com.tw/upload/images/20250807/20102973TPkuoPwpxM.png

控制平面 (大腦) 組件詳解

控制平面的所有組件協同工作,為叢集提供統一的視圖和決策中心。

https://ithelp.ithome.com.tw/upload/images/20250827/20102973UPcMZhwmzi.png

kube-apiserver:叢集的統一入口

  • 核心職責:暴露 Kubernetes API,是所有內部和外部通訊的唯一入口
  • 作用:處理 REST 請求、驗證請求、並更新 etcd 中的物件狀態。無論是使用者透過 kubectl 下達指令,還是叢集內部組件之間的溝通,都必須經過 API Server。如果它故障,您將暫時失去對整個叢集的控制能力。

etcd:叢集的記憶體

  • 核心職責:一個高可用性的鍵值儲存系統,是 K8s 的唯一資料庫
  • 作用:儲存了叢集的所有狀態資料,包括 Pod、Service、Secret 等所有物件的設定和當前狀態。etcd 的穩定性和備份是維運 K8s 最重要的任務之一。

kube-scheduler:Pod 的調度員

  • 核心職責:監控新建立的、尚未被分配到節點的 Pod,並為它們選擇一個最合適的 Worker Node
  • 作用:調度決策會基於多種因素,包括資源需求 (requests)、節點親和性 (affinity)、污點與容忍 (taints/tolerations) 以及節點的當前負載等。

kube-controller-manager:狀態的維護者

  • 核心職責:運行一系列的控制器 (Controller),持續地將叢集的「當前狀態」調整為您在物件中定義的「期望狀態」。
  • 作用:每個控制器負責一種特定資源。例如:
    • Node Controller:偵測 Node 是否故障。
    • Deployment Controller:確保運行的 Pod 數量符合 Deployment 的設定。
    • Job Controller:監看一次性任務 (Job),並建立 Pod 來執行它們。

cloud-controller-manager:與雲端的橋樑

  • 核心職責:(可選) 讓 K8s 能夠與特定的雲端供應商 (AWS, GCP, Azure) 的 API 互動。
  • 作用:它將原本內建於 kube-controller-manager 中的雲端相關邏輯分離出來,使得 K8s 核心能夠獨立於各家雲平台發展。它負責處理如雲端負載平衡器、區塊儲存等資源的建立與管理。

工作節點 (身體) 組件詳解

每個 Worker Node 上都運行著以下關鍵組件,負責管理在本機運行的 Pod。

kubelet:節點上的總管

  • 核心職責:在每個 Node 上運行的代理程式 (Agent),確保容器在 Pod 中正常運行。
  • 作用kubelet 會從 API Server 接收 Pod 的規格定義 (PodSpec),並指示容器運行時 (Container Runtime) 根據這些規格來啟動、停止或重啟容器。它也負責定期向 API Server 回報 Node 和 Pod 的健康狀態。

kube-proxy:叢集的網路工程師

  • 核心職責:在每個 Node 上維護網路規則,實現 K8s 的 Service 概念。
  • 作用kube-proxy 確保您能夠透過一個穩定的虛擬 IP (ClusterIP) 來存取一組 Pod,並在這些 Pod 之間進行負載平衡。它通常透過 iptablesIPVS 來實現這些網路規則。

Container Runtime:容器的執行者

  • 核心職- 責:真正負責運行容器的軟體。
  • 作用:K8s 支援所有符合 CRI (Container Runtime Interface) 標準的容器運行時,最常見的包括 containerdCRI-O

不可或缺的附加元件 (Addons)

Addons 是擴展 K8s 功能的 Pod 和 Service。它們雖然不是核心組件,但對於建立一個功能完備的叢集至關重要。

K8s 的插件化哲學

您會發現,許多基礎功能(如網路、監控、日誌)K8s 本身並不提供預設的實作。這並非疏忽,而是一種刻意的設計哲學。K8s 選擇只定義標準介面(如 CNI, CSI),並將具體的實作交給廣大的社群和廠商。這種插件化的設計,催生了 K8s 豐富而強大的生態系,讓使用者可以根據自身需求,自由選擇最適合的解決方案。

關鍵 Addons

  • DNS:叢集 DNS 是必不可少的 Addon,它為 Service 提供名稱解析,讓 Pod 之間可以透過服務名稱而非 IP 位址進行通訊。最常見的實作是 CoreDNS
  • 網路插件 (CNI):K8s 要求每個 Pod 都必須擁有一個獨一無二的 IP 位址,並能與其他 Pod 直接通訊。實現這個網路模型的責任就落在 CNI 插件上。常見的選擇包括 Calico, Cilium, Flannel 等。
  • 監控與日誌:K8s 本身不包含完整的監控和日誌方案,您需要自行部署如 Prometheus, Grafana, ELK Stack 等工具來收集和分析叢集的指標與日誌。

理解 K8s 的架構和各組件的職責,是深入學習和有效維運 K8s 的第一步。這個分佈式系統的每一部分都各司其職,共同協作,最終為您的應用程式提供了一個強大、穩定且富有彈性的運行平台。


上一篇
Concepts - Overview
下一篇
Concepts - Cluster Architecture: Node
系列文
let's beginning use kubernetes29
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言